import apiClient from './config'

/**
 * 订单相关 API
 */
export const ordersAPI = {
  /**
   * 获取订单列表（分页）
   * @param {Object} params - 查询参数
   * @param {number} params.page - 页码
   * @param {number} params.pageSize - 每页大小
   * @param {string} params.status - 订单状态过滤
   * @param {number} params.customerId - 客户ID过滤
   * @param {number} params.stationId - 站点ID过滤
   * @param {string} params.startDate - 开始日期
   * @param {string} params.endDate - 结束日期
   * @param {string} params.orderNo - 订单号搜索
   * @returns {Promise} 订单列表
   */
  getOrders(params = {}) {
    return apiClient.get('/orders', { params })
  },

  /**
   * 根据ID获取订单详情
   * @param {number} orderId - 订单ID
   * @returns {Promise} 订单详情
   */
  getOrderById(orderId) {
    return apiClient.get(`/orders/${orderId}`)
  },

  /**
   * 根据订单号获取订单详情
   * @param {string} orderNo - 订单号
   * @returns {Promise} 订单详情
   */
  getOrderByNo(orderNo) {
    return apiClient.get(`/orders/no/${orderNo}`)
  },

  /**
   * 创建订单
   * @param {Object} orderData - 订单数据
   * @param {Array} orderData.items - 订单物品列表
   * @param {number} orderData.items[].itemId - 物品ID
   * @param {number} orderData.items[].quantity - 数量
   * @param {string} orderData.pickupAddress - 取货地址
   * @param {string} orderData.pickupTime - 预约取货时间
   * @param {number} orderData.stationId - 分配站点ID（可选）
   * @param {string} orderData.notes - 订单备注
   * @returns {Promise} 创建结果
   */
  createOrder(orderData) {
    return apiClient.post('/orders', orderData)
  },

  /**
   * 更新订单信息
   * @param {number} orderId - 订单ID
   * @param {Object} orderData - 更新的订单数据
   * @returns {Promise} 更新结果
   */
  updateOrder(orderId, orderData) {
    return apiClient.put(`/orders/${orderId}`, orderData)
  },

  /**
   * 更新订单状态
   * @param {number} orderId - 订单ID
   * @param {string} status - 状态（pending/confirmed/in_progress/completed/cancelled）
   * @param {string} notes - 状态更新备注
   * @returns {Promise} 操作结果
   */
  updateOrderStatus(orderId, status, notes = '') {
    return apiClient.patch(`/orders/${orderId}/status`, { status, notes })
  },

  /**
   * 取消订单
   * @param {number} orderId - 订单ID
   * @param {string} reason - 取消原因
   * @returns {Promise} 取消结果
   */
  cancelOrder(orderId, reason) {
    return apiClient.patch(`/orders/${orderId}/cancel`, { reason })
  },

  /**
   * 确认订单
   * @param {number} orderId - 订单ID
   * @param {Object} confirmData - 确认数据
   * @param {number} confirmData.stationId - 分配站点ID
   * @param {string} confirmData.actualPickupTime - 实际取货时间
   * @returns {Promise} 确认结果
   */
  confirmOrder(orderId, confirmData) {
    return apiClient.patch(`/orders/${orderId}/confirm`, confirmData)
  },

  /**
   * 开始处理订单
   * @param {number} orderId - 订单ID
   * @param {Object} processData - 处理数据
   * @param {string} processData.actualPickupTime - 实际取货时间
   * @returns {Promise} 处理结果
   */
  startProcessing(orderId, processData) {
    return apiClient.patch(`/orders/${orderId}/start-processing`, processData)
  },

  /**
   * 完成订单
   * @param {number} orderId - 订单ID
   * @param {Object} completionData - 完成数据
   * @param {Array} completionData.actualItems - 实际回收物品
   * @param {number} completionData.actualItems[].itemId - 物品ID
   * @param {number} completionData.actualItems[].actualQuantity - 实际数量
   * @param {number} completionData.actualItems[].actualPrice - 实际单价
   * @returns {Promise} 完成结果
   */
  completeOrder(orderId, completionData) {
    return apiClient.patch(`/orders/${orderId}/complete`, completionData)
  },

  /**
   * 获取订单物品明细
   * @param {number} orderId - 订单ID
   * @returns {Promise} 物品明细列表
   */
  getOrderItems(orderId) {
    return apiClient.get(`/orders/${orderId}/items`)
  },

  /**
   * 更新订单物品明细
   * @param {number} orderId - 订单ID
   * @param {Array} items - 物品明细列表
   * @returns {Promise} 更新结果
   */
  updateOrderItems(orderId, items) {
    return apiClient.put(`/orders/${orderId}/items`, { items })
  },

  /**
   * 获取我的订单（客户）
   * @param {Object} params - 查询参数
   * @returns {Promise} 我的订单列表
   */
  getMyOrders(params = {}) {
    return apiClient.get('/orders/my', { params })
  },

  /**
   * 获取站点订单（站点管理员）
   * @param {number} stationId - 站点ID
   * @param {Object} params - 查询参数
   * @returns {Promise} 站点订单列表
   */
  getStationOrders(stationId, params = {}) {
    return apiClient.get(`/orders/station/${stationId}`, { params })
  },

  /**
   * 获取订单统计信息
   * @param {Object} params - 查询参数
   * @param {string} params.startDate - 开始日期
   * @param {string} params.endDate - 结束日期
   * @param {string} params.groupBy - 分组方式（day/week/month）
   * @returns {Promise} 统计信息
   */
  getOrdersStats(params = {}) {
    return apiClient.get('/orders/stats', { params })
  },

  /**
   * 批量分配订单到站点
   * @param {Array} assignments - 分配列表
   * @param {number} assignments[].orderId - 订单ID
   * @param {number} assignments[].stationId - 站点ID
   * @returns {Promise} 分配结果
   */
  batchAssignOrders(assignments) {
    return apiClient.patch('/orders/batch-assign', { assignments })
  },

  /**
   * 导出订单数据
   * @param {Object} params - 导出参数
   * @returns {Promise} 导出文件
   */
  exportOrders(params = {}) {
    return apiClient.get('/orders/export', { 
      params,
      responseType: 'blob'
    })
  },

  /**
   * 获取订单时间线
   * @param {number} orderId - 订单ID
   * @returns {Promise} 时间线数据
   */
  getOrderTimeline(orderId) {
    return apiClient.get(`/orders/${orderId}/timeline`)
  },

  /**
   * 计算订单价格预估
   * @param {Array} items - 物品列表
   * @param {number} items[].itemId - 物品ID
   * @param {number} items[].quantity - 数量
   * @returns {Promise} 价格预估
   */
  calculateOrderPrice(items) {
    return apiClient.post('/orders/calculate-price', { items })
  }
}
